package co.com.travelsoft.ati.controller;

import java.util.ArrayList;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import co.com.travelsoft.ati.entities.Ciudades;
import co.com.travelsoft.ati.entities.Eventos;
import co.com.travelsoft.ati.entities.Paises;
import co.com.travelsoft.ati.entities.Tiposevento;
import co.com.travelsoft.ati.entities.ejb.EventosEJB;
import co.com.travelsoft.ati.exception.TravelSoftException;
import co.com.travelsoft.ati.utils.RecursosUtil;

/**
 * Clase delegada que permite la comunicacion 
 * remota con los EJBs que exponen los servicios
 * relativos a eventos en la aplicacion.
 * 
 * @author Luis Eduardo
 *
 */
public class EventosDelegate {

	private static final String TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE = "Travel/EventosEJBBean/remote";

	/**
	 * Permite crear un evento.
	 * @param eventos 
	 * @exception throws TravelSoftException 
	 */
	public void crearEventos(Eventos eventos) throws TravelSoftException{
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			eventosEJB.crearEventos(eventos);
		} catch (NamingException e) {
			e.printStackTrace();
			throw new TravelSoftException ("Se ha presentado problema de nombramiento EJB al intentar crear Eventos.", e);
		}
	}
	
	/**
	 * Permite buscar un evento por su identificacion.
	 * @param eventos
	 * @return Eventos : un objeto evento
	 */
	public Eventos buscarEventosPorId(Eventos eventos){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.buscarEventosPorId(eventos);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return new Eventos();
	}
	
	/**
	 * Permite listar todos los eventos existentes.
	 * @return List<Eventos> : una lista de eventos
	 */	
	public List<Eventos> listarEventos(){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.listarEventos();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return new ArrayList<Eventos>();
	}
	
	/**
	 * Permite actualizar la informacion de un evento.
	 * @param eventos
	 * @exception throws TravelSoftException 
	 */	
	public void actualizarEventos(Eventos eventos) throws TravelSoftException{
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			eventosEJB.actualizarEventos(eventos);
		} catch (NamingException e) {
			e.printStackTrace();
			throw new TravelSoftException ("Se ha presentado problema de nombramiento EJB al intentar actualizar Eventos.", e);
		}
	}
	
	/**
	 * Permite borrar un evento.
	 * @param eventos
	 * @exception throws TravelSoftException  
	 */
	public void borrarEventos(Eventos eventos) throws TravelSoftException{
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			eventosEJB.borrarEventos(eventos);
		} catch (NamingException e) {
			e.printStackTrace();
			throw new TravelSoftException ("Se ha presentado problema de nombramiento EJB al intentar borrar Eventos.", e);
		}
	}	
	
	/**
	 * Permite buscar una ciudad por su identificacion.
	 * @param ciudades
	 * @return Ciudades : un objeto ciudad
	 */
	public Ciudades buscarCiudadesPorId(Ciudades Ciudades){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB EventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return EventosEJB.buscarCiudadesPorId(Ciudades);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return new Ciudades();
	}
	

	/**
	 * Permite listar todas las ciudades existentes.
	 * @return List<Ciudades> : una lista de ciudades
	 */	
	public List<Ciudades> listarCiudades(){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.listarCiudades();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return new ArrayList<Ciudades>();
	}
	
	/**
	 * Permite buscar un pais por su identificacion.
	 * @param paises
	 * @return Paises : un objeto pais
	 */
	public Paises buscarPaisesPorId(Paises paises){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.buscarPaisesPorId(paises);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return new Paises();
	}
	

	/**
	 * Permite listar todos los paises existentes.
	 * @return List<Paises> : una lista de paises
	 */	
	public List<Paises> listarPaises(){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.listarPaises();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return new ArrayList<Paises>();
	}
	
	/**
	 * Permite buscar un Tipo de Evento por su identificacion.
	 * @param tiposevento
	 * @return Tiposevento : un objeto tiposevento
	 */
	public Tiposevento buscarTiposEventoPorId(Tiposevento tiposevento){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.buscarTiposEventoPorId(tiposevento);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return new Tiposevento();
	}
	

	/**
	 * Permite listar todos los Tipos de Evento existentes.
	 * @return List<Tiposevento> : una lista de Tipos de Evento
	 */	
	public List<Tiposevento> listarTiposEvento(){
		try {
			InitialContext ctx = RecursosUtil.getContextoInicial();
			EventosEJB eventosEJB = (EventosEJB) ctx.lookup(TRAVEL_SOFT_EJB_EVENTOS_EJB_REMOTE);		
			return eventosEJB.listarTiposEvento();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return new ArrayList<Tiposevento>();
	}

	
}
